C语言实现学生综合测评管理系统

您所在的位置:网站首页 c fopen_s C语言实现学生综合测评管理系统

C语言实现学生综合测评管理系统

2023-05-17 15:39| 来源: 网络整理| 查看: 265

#include #include #include #define MAX_STUDENT 100 #define FILE_NAME "students.txt"

struct Student {     char name[20];     int id;     int english_score;     int math_score;     int computer_score; };

int num_students = 0;

// 添加学生信息 void add_student() {     struct Student student;     printf("添加学生信息\n");     printf("姓名:");     scanf("%s", student.name);     printf("学号:");     scanf("%d", &student.id);     printf("英语成绩:");     scanf("%d", &student.english_score);     printf("数学成绩:");     scanf("%d", &student.math_score);     printf("计算机成绩:");     scanf("%d", &student.computer_score);

    FILE* fp = fopen(FILE_NAME, "a"); // 以追加模式打开文件     fprintf(fp, "%s %d %d %d %d\n", student.name, student.id, student.english_score, student.math_score, student.computer_score); // 写入数据     fclose(fp);     num_students++; // 学生数量加一     printf("学生信息已添加\n"); }

void modify_student() {     int target_id;     printf("修改学生信息\n");     printf("请输入要修改的学生学号:");     scanf("%d", &target_id);

    FILE* fp = fopen(FILE_NAME, "r"); // 以只读模式打开文件     FILE* tmp_fp = fopen("tmp.txt", "w"); // 以写模式打开临时文件

    struct Student student;     int found = 0; // 标记是否找到目标学生     while (fscanf(fp, "%s %d %d %d %d", student.name, &student.id, &student.english_score, &student.math_score, &student.computer_score) == 5) { // 读取每个学生的信息         if (student.id == target_id) { // 如果找到目标学生             found = 1;             printf("原信息: %s %d %d %d %d\n", student.name, student.id, student.english_score, student.math_score, student.computer_score);             printf("新姓名:");             scanf("%s", student.name);             printf("新英语成绩:");             scanf("%d", &student.english_score);             printf("新数学成绩:");             scanf("%d", &student.math_score);             printf("新计算机成绩:");             scanf("%d", &student.computer_score);             printf("修改后: %s %d %d %d %d\n", student.name, student.id, student.english_score, student.math_score, student.computer_score);         }         fprintf(tmp_fp, "%s %d %d %d %d\n", student.name, student.id, student.english_score, student.math_score, student.computer_score); // 将学生信息写入临时文件     }

    fclose(fp);     fclose(tmp_fp);

    remove(FILE_NAME); // 删除原文件     rename("tmp.txt", FILE_NAME); // 将临时文件重命名

    if (!found) { // 如果没有找到目标学生         printf("未找到学生\n");     } else {         printf("学生信息已修改\n");     } }

void query_student() {     int target_id;     printf("查询学生信息\n");     printf("请输入要查询的学生学号:");     scanf("%d", &target_id);

    FILE* fp = fopen(FILE_NAME, "r"); // 以只读模式打开文件

    struct Student student;     int found = 0; // 标记是否找到目标学生     while (fscanf(fp, "%s %d %d %d %d", student.name, &student.id, &student.english_score, &student.math_score, &student.computer_score) == 5) { // 读取每个学生的信息         if (student.id == target_id) { // 如果找到目标学生             found = 1;             printf(" 姓名:%s\n学号: %d\n英语成绩:%d\n数学成绩:%d\n计算机成绩:%d\n", student.name, student.id, student.english_score, student.math_score, student.computer_score);             break; // 找到目标学生后终止循环         }     }

    fclose(fp);

    if (!found) { // 如果没有找到目标学生         printf("未找到学生\n");     } }

void delete_student() {     int target_id;     printf("删除学生信息\n");     printf("请输入要删除的学生学号:");     scanf("%d", &target_id);

    FILE* fp = fopen(FILE_NAME, "r"); // 以只读模式打开文件     FILE* tmp_fp = fopen("tmp.txt", "w"); // 以写模式打开临时文件

    struct Student student;     int found = 0; // 标记是否找到目标学生     while (fscanf(fp, "%s %d %d %d %d", student.name, &student.id, &student.english_score, &student.math_score, &student.computer_score) == 5) { // 读取每个学生的信息         if (student.id == target_id) { // 如果找到目标学生             found = 1;             printf("已删除学生信息:%s %d %d %d %d\n", student.name, student.id, student.english_score, student.math_score, student.computer_score); } else { fprintf(tmp_fp, "%s %d %d %d %d\n", student.name, student.id, student.english_score, student.math_score, student.computer_score); // 将学生信息写入临时文件 } }

fclose(fp); fclose(tmp_fp);

remove(FILE_NAME); // 删除原文件 rename("tmp.txt", FILE_NAME); // 将临时文件重命名

if (!found) { // 如果没有找到目标学生     printf("未找到学生\n"); } else {     num_students--; // 学生数量减一     printf("学生信息已删除\n"); } }

void menu() {     printf("\n请选择功能\n");     printf("1. 添加学生信息\n");     printf("2. 修改学生信息\n");     printf("3. 查询学生信息\n");     printf("4. 删除学生信息\n");     printf("5. 显示所有学生的成绩信息\n");     printf("0. 退出\n"); } void compute_score_statistics(struct Student* students, int num_students, int* total_english_score, int* total_math_score, int* total_computer_score, double* avg_english_score, double* avg_math_score, double* avg_computer_score) { *total_english_score = 0; *total_math_score = 0; *total_computer_score = 0; for (int i = 0; i < num_students; i++) {

*total_english_score += students[i].english_score;

*total_math_score += students[i].math_score; *total_computer_score += students[i].computer_score; } *avg_english_score = *total_english_score / num_students; *avg_math_score = *total_math_score / num_students; *avg_computer_score = *total_computer_score / num_students; }

void show_all_scores() { struct Student students[MAX_STUDENT];

FILE* fp = fopen(FILE_NAME, "r");

int i = 0; while (fscanf(fp, "%s %d %d %d %d", students[i].name, &students[i].id, &students[i].english_score, &students[i].math_score, &students[i].computer_score) == 5) {     i++; }

fclose(fp);

int total_english_score, total_math_score, total_computer_score; double avg_english_score, avg_math_score, avg_computer_score; compute_score_statistics(students, i, &total_english_score, &total_math_score, &total_computer_score, &avg_english_score, &avg_math_score, &avg_computer_score);

printf("学号\t姓名\t英语\t数学\t计算机\t总分\n"); for (int j = 0; j < i; j++) {     int total_score = students[j].english_score + students[j].math_score + students[j].computer_score;     printf("%d\t%s\t%d\t%d\t%d\t%d\n", students[j].id, students[j].name, students[j].english_score, students[j].math_score, students[j].computer_score, total_score); } printf("\t平均分\t%.1lf\t%.1lf\t%.1lf\n", avg_english_score, avg_math_score, avg_computer_score); }

int main() { int choice; do { printf("\n学生综合测评管理系统\n"); printf("1. 添加学生信息\n"); printf("2. 修改学生信息\n"); printf("3. 查询学生信息\n"); printf("4. 删除学生信息\n"); printf("5. 显示所有学生的成绩信息\n"); printf("0. 退出系统\n"); printf("请选择功能:"); scanf("%d", &choice);

    switch (choice) {         case 1:             add_student();             break;         case 2:             modify_student();             break;         case 3:             query_student();             break;         case 4:             delete_student();             break;         case 5:             show_all_scores();             break;         case 0:             break;         default:             printf("无效的选择\n");             break;     } } while (choice != 0);

return 0;}



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3